package es.tikitaka.dao;

import java.util.List;

import es.tikitaka.dictionary.ColegioDic;
import es.tikitaka.dictionary.MunicipioDic;
import es.tikitaka.dictionary.ProvinciaDic;
import es.tikitaka.domain.Temporada;
import es.tikitaka.domain.colegiado.Colegiado;

/**
 * 
 * @author Saúl Domínguez
 * @since 2010
 * @category PFC
 */

public interface ColegiadoService {

	/**
	 * Método para listar todos los colegiados almacenados en el sistema
	 * 
	 * @return lista de colegiados
	 */
	List<Colegiado> getList();

	/**
	 * Método para obtener los colegiados coincidentes con los criterios de
	 * búsqueda
	 * 
	 * @param nombre
	 *            Nombre del colegiado
	 * @param apellidos
	 *            Apellidos del colegiado
	 * @param temporada
	 *            Temporada para la que se tienen datos
	 * @param colegio
	 *            Colegio al que pertenece
	 * @param provincia
	 *            Provincia de procedencia
	 * @param municipio
	 *            Municipio de procedencia
	 * @param edad
	 *            Edad del colegiado
	 * @return lista de colegiados coincidentes con los criterios
	 */
	List<Colegiado> buscar(String nombre, String apellidos,
			Temporada temporada, ColegioDic colegio, ProvinciaDic provincia,
			MunicipioDic municipio, Integer edad, StringBuffer s);

	/**
	 * Método para buscar los colegiados activos coincidentes con el patrón de
	 * búsqueda
	 * 
	 * @param buscar
	 *            Cadena de texto a buscar
	 * @return lista de colegiados coincidentes
	 */
	List<Colegiado> buscarActivos(String buscar);

	/**
	 * Método para buscar los colegiados coincidentes con el patrón de búsqueda
	 * y que además no tenga asociada ya la temporada que se está pasando por
	 * parámetro
	 * 
	 * @param buscar
	 *            Cadena de texto a buscar
	 * @param en
	 *            campo donde buscar (apellidos o nombre)
	 * @param temporada
	 *            Temporada asociada
	 * @return
	 */
	List<Colegiado> buscarActivosSinTemporada(String buscar, int en,
			Temporada temporada);

	/**
	 * 
	 * @param colegiado
	 * @return
	 */
	Colegiado merge(Colegiado colegiado);

	/**
	 * Método que comprueba si existe en el sistema el dni que se pasa como
	 * parámetro
	 * 
	 * @param dni
	 *            DNI a comprobar
	 * @return estado del proceso (true or false)
	 */
	boolean existeDni(String dni);

	/**
	 * Método para eliminar a un colegiado del sistema
	 * 
	 * @param id
	 *            Id del colegiado
	 * @return estado del proceso (true or false)
	 */
	boolean delete(Integer id);

	/**
	 * Método para almacenar en el sistema un colegiado o las modificaciones
	 * sufridas por un colegiado ya existente
	 * 
	 * @param colegiado
	 *            Colegiado a almacenar
	 * @return estado del proceso (true or false)
	 */
	boolean save(Colegiado colegiado);
}
